var MetaHelper=function(){
	this.codeIdMap ={};
	this.metaMap ={};
};

//保存对象备注
MetaHelper.prototype.saveMark=function(metaId,id,mark,fn){
	var url="../module/Data-saveMarkByMetaId.action";
	var data={metaId:metaId,sid:id,mark:mark};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}else{
		return Ext.decode(doHttpPost(url+"?metaId="+metaId+"&sid="+id+"&mark="+mark).text)["data"];
	}
};
//查询对象备注
MetaHelper.prototype.getMark=function(metaId,id,fn){
	var url="../module/Data-getMarkByMetaId.action";
	var data={metaId:metaId,sid:id};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}else{
		return Ext.decode(doHttpPost(url+"?metaId="+metaId+"&sid="+id).text)["data"];
	}
};

//创建记录
MetaHelper.prototype.createRecord=function(metaId,params,fn){
	var url="../module/Data-createByMetaId.action";
	var data={metaId:metaId,jsonStr:MetaHelper.encode(params)};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}
};

//更新记录
MetaHelper.prototype.updateRecord=function(metaId,id,params,fn){
	var url="../module/Data-updateByMetaId.action";
	var data={metaId:metaId,sid:id,jsonStr:Ext.encode(params)};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}
};
//调整记录排序
MetaHelper.prototype.adjustSeq=function(metaId,id,step,fn){
	var url="../module/Data-adjustSeq.action";
	var data={metaId:metaId,sid:id,step:step};
	if(fn){
		MetaHelper.ajax(url, data, fn);
	}
};

MetaHelper.prototype.getMetaFields=function(metaId,fn){
	return this.getSchema(100060138608,metaId,fn);
};

//查询对象关联字段
MetaHelper.prototype.getSchema=function(id){
	var url="./../model/schema?id="+id;
	return Ext.decode(doHttpPost(url).text)["data"];
};

//查询模型描述记录
MetaHelper.prototype.queryRecords=function(metaId,params,fn){
	var url="../module/Data-queryRecords.action";
	var data={metaId:metaId,params:params};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}
};

//删除记录
MetaHelper.prototype.deleteRecords=function(metaId,sids,fn){
	var url="../module/Data-deleteRecords.action";
	var data={metaId:metaId,ids:sids};
	var param={jsonStr:MetaHelper.encode(data)};
	if(fn){
		MetaHelper.ajax(url,param,fn);
	}
};

//查询元对象特性元
MetaHelper.prototype.getTraitIds=function(metaId,rankId,fn){
	var url="../module/Data-getTraits.action";
	var data={metaId:metaId,rankId:rankId};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}
};

MetaHelper.prototype.getTraitId=function(metaId,rankId){
	var url="../module/Data-getTraits.action";
	var rs=Ext.decode(doHttpPost(url+"?metaId="+metaId+"&rankId="+rankId).text);
	if(rs["success"])return rs["data"][0]["metaId"];
	return 0;
};

//保存对象关联
MetaHelper.prototype.savePacks=function(metaId,fid,rids,fn){
	var url="../module/Data-savePacks.action";
	var data={metaId:metaId,fid:fid,rids:rids};
	var params={jsonStr:MetaHelper.encode(data)};
	if(fn){
		MetaHelper.ajax(url,params,fn);
	}
};

//由id查询元明细
MetaHelper.prototype.saveConfMap=function(metaId,id,params,fn){
	var url="../module/Data-saveConfMap.action";
	var data={metaId:metaId,fid:id,params:params};
	var param={jsonStr:MetaHelper.encode(data)};
	if(fn){
		MetaHelper.ajax(url,param,fn);
	}
};

//保存对象属性
MetaHelper.prototype.saveAttrMap=function(metaId,id,params,fn){
	var url="../module/Data-saveAttrMap.action";
	var data={metaId:metaId,fid:id,params:params};
	var param={jsonStr:MetaHelper.encode(data)};
	if(fn){
		MetaHelper.ajax(url,param,fn);
	}
};

//保存时效配置
MetaHelper.prototype.saveActiveConfMap=function(metaId,id,params,active,fn){
	var url="../module/Data-saveActiveConf.action";
	var data={metaId:metaId,fid:id,params:params,active:active};
	var param={jsonStr:MetaHelper.encode(data)};
	if(fn){
		MetaHelper.ajax(url,param,fn);
	}
};
//查询当前生效
MetaHelper.prototype.getCurrentConfMap=function(metaId,id,fn){
	var url="../module/Data-getCurrentConfMap.action";
	var data={metaId:metaId,sid:id};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}
};
//查询未来待生效
MetaHelper.prototype.getFutureConfMap=function(metaId,id,fn){
	var url="../module/Data-getFutureConfMap.action";
	var data={metaId:metaId,sid:id};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}
};
//查询指定时间生效
MetaHelper.prototype.getActiveConfMap=function(metaId,id,tims,fn){
	var url="../module/Data-getActiveConfMap.action";
	var data={metaId:metaId,sid:id,date:tims};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}
};
//查询所有时效配置列表
MetaHelper.prototype.getAllConfMapList=function(metaId,id,fn){
	var url="../module/Data-getAllConfMapList.action";
	var data={metaId:metaId,sid:id};
	if(fn){
		MetaHelper.ajax(url,data,fn);
	}
};

//由id查询元明细
MetaHelper.prototype.queryMetaById=function(metaId,fn){
	var meta=this.metaMap[metaId];
	if(!meta){
		var url="../module/Data-queryMetaById.action";
		if(fn){
			MetaHelper.ajax(url,{"metaId":metaId},fn);
		}
		else {
			var data=Ext.decode(doHttpPost(url).text);
			if(data["success"]){
				meta=data["data"];
				metaMap[meta["SID"]]=meta;
				codeIdMap[meta["CODE"]]=meta["SID"];
			}
		}
		
	}
	return meta;
};

//由name查询metaId
MetaHelper.prototype.getMetaIdByName=function(name,fn){
	var id=this.codeIdMap[name];
	if(!id){
		var url="../module/Data-getMetaIdByName.action?name="+name;
		var data=Ext.decode(doHttpPost(url).text);
		if(!fn)return data["data"];
		fn(data["data"]);
	}
};

//由名称查询元明细
MetaHelper.prototype.queryMetaByName=function(name,fn){
	var id=this.codeIdMap.get(name);
	if(!id){
		var url="../module/Data-getMetaByName.action?name="+name;
		var data=Ext.decode(doHttpPost(url).text);
		if(!fn)return data["data"];
		fn(data["data"]);
	}
	
};

//查询元附属
MetaHelper.prototype.queryTraitsByMetaId=function(metaId,fn){
	var url="../module/Data-getRelatedMetas.action?metaId="+metaId;
	var data=Ext.decode(doHttpPost(url).text);
	if(!fn)
	return data["data"];
	fn(data["data"]);
};

//查询对象关联字段
MetaHelper.prototype.getFields=function(metaId,sid,fn){
	var url="../module/Data-getFields.action";
	if(fn){
		MetaHelper.ajax(url,{metaId:metaId,sid:sid},fn);
	}else{
		var data=Ext.decode(doHttpPost(url+"?metaId="+metaId+"&sid="+sid).text);
		return data["data"];
	}
	
};

//由编码查询字典明细
MetaHelper.prototype.getDictByCode=function(code,fn){
	var url="../module/Data-getDictByCode.action";
	if(fn){
		MetaHelper.ajax(url,{code:code},fn);
	}else{
		var data=Ext.decode(doHttpPost(url+"?code="+code).text);
		if(data["success"])
			return data["data"];
		else{
			return null;
		}
	}
};

MetaHelper.prototype.getAttrFields=function(metaId,fn){
	var url="../module/Data-getAttrFields.action";
	if(fn){
		MetaHelper.ajax(url,{metaId:metaId},fn);
	}else{
		var data=Ext.decode(doHttpPost(url+"?metaId="+metaId).text);
		if(data["success"])
			return data["data"];
		else{
			return {};
		}
	}
	
};

//查询对象特定属性
MetaHelper.prototype.getAttrMap=function(metaId,sid,fn){
	var url="../module/Data-getAttrMap.action";
	if(fn){
		MetaHelper.ajax(url,{metaId:metaId,sid:sid},fn);
	}else{
		var data=Ext.decode(doHttpPost(url+"?metaId="+metaId+"&sid="+sid).text);
		if(data["success"])
			return data["data"];
		else{
			return {};
		}
	}
};

//查询对象特定配置
MetaHelper.prototype.getConfMap=function(metaId,sid,fn){
	var url="../module/Data-getConfMap.action";
	if(fn){
		MetaHelper.ajax(url,{metaId:metaId,sid:sid},fn);
	}else{
		var data=Ext.decode(doHttpPost(url+"?metaId="+metaId+"&sid="+sid).text);
		if(data["success"])
			return data["data"];
		else{
			return null;
		}
	}
};

//查询枚举列表
MetaHelper.prototype.getEnumList=function(id,fn){
	var url = "../module/Data-getEnumList.action";
	MetaHelper.ajax(url,{sid:id},fn);
};

//按子序排序
MetaHelper.prototype.sortSeq=function(metaId,fid,fn){
	var url="../module/Data-sortSeq.action";
	MetaHelper.ajax(url,{metaId:metaId,fid:fid},fn);
};

MetaHelper.getInstance=function(){
	var p=window;
	var ins=null;
	while((p!=p.top) && p.parent){
		p=p.parent;
		if(p.metaHelper){ins=p.metaHelper;}
	}
	return ins?ins:new MetaHelper();
};

MetaHelper.prototype.getFieldSelector=function(cb){
	var topwin=MetaHelper.getTopWin();
   	if(!topwin.getFieldChoiceWin){
   		topwin.$import("editor.field_selector");
   	}
   	var win=topwin.getFieldChoiceWin(cb);
   	win.show();
};
MetaHelper.prototype.getApiSelector=function(cb){
	var topwin=MetaHelper.getTopWin();
   	if(!topwin.getApiChoiceWin){
   		topwin.$import("editor.api_selector");
   	}
   	var win=topwin.getApiChoiceWin(cb);
   	win.show();
};
MetaHelper.getTopWin=function(){
	var p=window;
	while((p!=p.top) && p.parent){
		p=p.parent;
	}
	return p;
};

MetaHelper.decode=function(str){
	console.log(str);
	return eval("("+str+")");
};
MetaHelper.encode=function(o){
	try{
		if(Ext&&Ext.encode)return Ext.encode(o);
	}catch(e){
		if(window.JSON)return JSON.stringify(o);
	}
};

MetaHelper.ajax=function(url,params,fn){
	try{
		if($){
			$.post(url,params,function(data){
				fn(data);
			});
		}
	}catch(e){
		if(Ext){
			Ext.Ajax.request({
				url:url,
				params:params,
				success:function(data){
					var d=Ext.decode(data["responseText"]);
					fn(d);
				},
				failure:function(data){
					var d=Ext.decode(data["responseText"]);
					fn(d);
				}
			});
		}
	}
};

var metaHelper=MetaHelper.getInstance();

var topWin=MetaHelper.getTopWin()||window;
var TopExt=(topWin&&topWin.Ext)||Ext;

function Alert(msg){
	if(TopExt){
		TopExt.Msg.alert('提示',msg);
	}else{
		alert(msg);
	}
}

function Confirm(msg,fn){
	if(TopExt){
		TopExt.Msg.confirm('确定',msg,function(btn){
			if(btn!="yes")return;
			fn();
		});
	}else{
		var rs=confirm(msg);
		if(rs)fn();
	}
}
